<!DOCTYPE html>
<html lang="zh">
<head>
  <!-- 元数据 -->
  <meta charset="utf-8">
  <link rel="icon" href="/blog/images/favicon.ico">
  <title>基础汇总 | YongKJ</title>
  <meta name="author" content="yongkj" />
  <meta http-equiv="Cache-Control" content="no-transform" />
  <meta http-equiv="Cache-Control" content="no-siteapp" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="robots" content="index,follow" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <meta name="format-detection" content="telphone=no, email=no" />
  
    
      <meta name="description" itemprop="description" content="Pursue excellence and success will follow." />
    
  
  <meta name="description" content="Java的8种基本数据类型 关于Java的8种基本数据类型，其名称、位数、默认值、取值范围及示例如下表所示：     序号 数据类型 位数 默认值 取值范围 举例说明    1 byte(位) 8 0 -2^7 ~ +2^7-1 byte b &#x3D; 10;   2 short(短整数) 16 0 -2^15 ~ +2^15-1 short s &#x3D; 10;   3 int(整数) 32 0 -2^31">
<meta property="og:type" content="article">
<meta property="og:title" content="基础汇总">
<meta property="og:url" content="https://yongkj.gitee.io/blog/2021/01/06/java-based-summary/index.html">
<meta property="og:site_name" content="YongKJ">
<meta property="og:description" content="Java的8种基本数据类型 关于Java的8种基本数据类型，其名称、位数、默认值、取值范围及示例如下表所示：     序号 数据类型 位数 默认值 取值范围 举例说明    1 byte(位) 8 0 -2^7 ~ +2^7-1 byte b &#x3D; 10;   2 short(短整数) 16 0 -2^15 ~ +2^15-1 short s &#x3D; 10;   3 int(整数) 32 0 -2^31">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://yongkj.gitee.io/blog/2021/01/06/java-based-summary/wallhaven-259722.jpg">
<meta property="article:published_time" content="2021-01-06T04:43:04.000Z">
<meta property="article:modified_time" content="2021-05-09T10:16:34.855Z">
<meta property="article:author" content="yongkj">
<meta property="article:tag" content="数据">
<meta property="article:tag" content="对象">
<meta property="article:tag" content="集合">
<meta property="article:tag" content="线程">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://yongkj.gitee.io/blog/2021/01/06/java-based-summary/wallhaven-259722.jpg">
<meta name="twitter:site" content="@Candiinya">
  <link rel="alternate" href="atom.xml" type="application/atom+xml">
  <!-- 站点验证相关 -->
  
    
    
    
  
  <!-- 样式表文件 -->
  <link rel="stylesheet" id="kratos-css" href="/blog/css/kratosr.min.css" type="text/css" media="all">
  <link rel="stylesheet" id="highlight-css" href="/blog/css/highlight.min.css" type="text/css" media="all">
  <link rel="stylesheet" id="fontawe-css" href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" type="text/css" media="all">
  <link rel="stylesheet" id="nprogress-css" href="https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.min.css" type="text/css" media="all">
  
  
  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css">
  
  
    <link rel="stylesheet" id="darkmode-css" href="/blog/css/kr-dark.min.css" type="text/css" media="all">
  
  <!-- 不得不预先加载的一些JS文件 -->
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
  
    <script src="https://cdn.jsdelivr.net/npm/qrcode_js@1.0.0/qrcode.min.js"></script>
  
  
<meta name="generator" content="Hexo 5.2.0"></head>


    <body class="custom-background">
        <div id="kratos-wrapper">
    <div id="kratos-page">
        <div id="kratos-header">
            <div class="nav-toggle"><a class="kratos-nav-toggle js-kratos-nav-toggle"><i></i></a></div>
            <header id="kratos-header-section">
                <div class="container">
                    <div class="nav-header">
                        <div class="color-logo"><a href="/blog/">YongKJ</a></div>
                        <nav id="kratos-menu-wrap">
                            <ul id="kratos-primary-menu" class="sf-menu">
                            
                            
                                <li><a href="/blog/"><i class="fa fa-home"></i>首页</a></li>
                            
                            
                            
                                <li><a href="/blog/archives/"><i class="fa fa-file"></i>档案馆</a></li>
                            
                            
                            
                                <li>
                                <a><i class="fa fa-link"></i>链接</a>
                                <ul class="sub-menu">
                                    
                                    
                                    
                                    
                                        <li><a target="_blank" rel="noopener" href="http://software.yongkj.cn/software/">软件俱乐部</a></li>
                                    
                                    
                                    
                                        <li><a target="_blank" rel="noopener" href="http://pocketyun.yongkj.cn/">袖珍网盘吧</a></li>
                                    
                                    
                                    
                                        <li><a target="_blank" rel="noopener" href="http://study.yongkj.cn/">英语随身学</a></li>
                                    
                                    
                                </ul>
                                </li>
                            
                            
                            
                                <li><a href="/blog/atom.xml"><i class="fa fa-rss"></i>RSS 订阅</a></li>
                            
                            
                            
                                <li><a href="/blog/about/"><i class="fa fa-paper-plane"></i>关于我</a></li>
                            
                            
                            </ul>
                        </nav>
                    </div>
                </div>
            </header>
        </div>
        <div class="kratos-start kratos-hero-2">
            <!-- <div class="kratos-overlay"></div> -->
            <div class="kratos-cover kratos-cover-2 text-center">
                <div class="desc desc2 animate-box">
                    <a href="/blog/"><h2>YongKJ</h2><br><span>勇往直前，永不言弃</span></a>
                </div>
            </div>
        </div>

        <div id="kratos-blog-post">
            <div class="container">
                    <div class="row">
                        
        <div id="main">
            <section class="col-md-8">
    <article>
        <div class="kratos-hentry kratos-post-inner clearfix">
            <header class="kratos-entry-header">
                <h1 class="kratos-entry-title text-center">基础汇总</h1>
                
                <div class="kratos-post-meta text-center">
                    <span>
                        <i class="fa fa-calendar"></i> 2021-01-06
                        <i class="fa fa-folder"></i> 分类于 <a class="label-link" href="/blog/categories/Java%E5%AD%A6%E4%B9%A0/">Java学习</a>
                        <i class="fa fa-user"></i> 作者 yongkj
                        <i class="fa fa-edit"></i> 
                        
                        
                            ~6.74K
                        
                        字
                        
                    </span>
                </div>
            </header>
            <div class="kratos-post-content">
                
                    <div class="kratos-post-inner-toc">
                        <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E7%9A%848%E7%A7%8D%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="toc-number">1.</span> <span class="toc-text">Java的8种基本数据类型</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#java%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%89%B9%E5%BE%81"><span class="toc-number">2.</span> <span class="toc-text">java面向对象的特征</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3"><span class="toc-number">3.</span> <span class="toc-text">抽象类与接口</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%86%85%E9%83%A8%E7%B1%BB"><span class="toc-number">4.</span> <span class="toc-text">内部类</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%87%8D%E8%BD%BD%E4%B8%8E%E9%87%8D%E5%86%99"><span class="toc-number">5.</span> <span class="toc-text">重载与重写</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%87%AA%E5%8A%A8%E8%A3%85%E7%AE%B1%E6%8B%86%E7%AE%B1"><span class="toc-number">6.</span> <span class="toc-text">自动装箱拆箱</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E4%B8%ADequals-%E5%92%8C-%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="toc-number">7.</span> <span class="toc-text">Java中equals()和&#x3D;&#x3D;的区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#java%E4%B8%ADString%E3%80%81StringBuffer%E5%92%8CStringBuilder%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="toc-number">8.</span> <span class="toc-text">java中String、StringBuffer和StringBuilder的区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E4%B8%AD%E7%9A%84%E9%9B%86%E5%90%88"><span class="toc-number">9.</span> <span class="toc-text">Java中的集合</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#ArrayList%E5%92%8CLinkedList%E5%8C%BA%E5%88%AB"><span class="toc-number">10.</span> <span class="toc-text">ArrayList和LinkedList区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#HashMap%E5%92%8CHashTable%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="toc-number">11.</span> <span class="toc-text">HashMap和HashTable的区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E5%AD%97%E8%8A%82%E6%B5%81%E5%92%8C%E5%AD%97%E7%AC%A6%E6%B5%81"><span class="toc-number">12.</span> <span class="toc-text">Java字节流和字符流</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%A4%9A%E7%BA%BF%E7%A8%8B"><span class="toc-number">13.</span> <span class="toc-text">多线程</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E5%92%8C%E5%BC%82%E6%AD%A5"><span class="toc-number">14.</span> <span class="toc-text">线程同步和异步</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8"><span class="toc-number">15.</span> <span class="toc-text">线程安全</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%BC%82%E5%B8%B8"><span class="toc-number">16.</span> <span class="toc-text">异常</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#JVM"><span class="toc-number">17.</span> <span class="toc-text">JVM</span></a></li></ol>
                    </div>
                
                <hr />
                <h3 id="Java的8种基本数据类型"><a href="#Java的8种基本数据类型" class="headerlink" title="Java的8种基本数据类型"></a>Java的8种基本数据类型</h3><ol>
<li>关于Java的8种基本数据类型，其名称、位数、默认值、取值范围及示例如下表所示：</li>
</ol>
<table>
<thead>
<tr>
<th>序号</th>
<th>数据类型</th>
<th>位数</th>
<th>默认值</th>
<th>取值范围</th>
<th>举例说明</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>byte(位)</td>
<td>8</td>
<td>0</td>
<td>-2^7 ~ +2^7-1</td>
<td>byte b = 10;</td>
</tr>
<tr>
<td>2</td>
<td>short(短整数)</td>
<td>16</td>
<td>0</td>
<td>-2^15 ~ +2^15-1</td>
<td>short s = 10;</td>
</tr>
<tr>
<td>3</td>
<td>int(整数)</td>
<td>32</td>
<td>0</td>
<td>-2^31 ~ +2^31-1</td>
<td>int i = 10;</td>
</tr>
<tr>
<td>4</td>
<td>long(长整数)</td>
<td>64</td>
<td>0</td>
<td>-2^63 ~ +2^63-1</td>
<td>long l = 10l;</td>
</tr>
<tr>
<td>5</td>
<td>float(单精度)</td>
<td>32</td>
<td>0.0</td>
<td>-2^128 ~ +2^127</td>
<td>float f = 10.0f;</td>
</tr>
<tr>
<td>6</td>
<td>double(双精度)</td>
<td>64</td>
<td>0.0</td>
<td>-2^1024 ~ +2^1023</td>
<td>double d = 10.0d;</td>
</tr>
<tr>
<td>7</td>
<td>char(字符)</td>
<td>16</td>
<td>空</td>
<td>0 ~ +2^16-1</td>
<td>char c = ‘c’;</td>
</tr>
<tr>
<td>8</td>
<td>boolean(布尔值)</td>
<td>8</td>
<td>false</td>
<td>true、false</td>
<td>boolean b = true;</td>
</tr>
</tbody></table>
<h3 id="java面向对象的特征"><a href="#java面向对象的特征" class="headerlink" title="java面向对象的特征"></a>java面向对象的特征</h3><ol>
<li>java面向对象的三大特征是什么?<br>封装、继承、多态。</li>
<li>封装<br>把属性和方法隐藏起来，只保留一些对外的接口和外部进行交互。</li>
<li>继承<br>子类继承父类的特征和行为，使得子类具有父类的非private属性和方法。</li>
<li>多态<br>多态就是同一个接口，使用不同的实现，而执行不同的操作。</li>
<li>抽象<br>将一类对象的共同特征总结出来构造类的过程，数据抽象指的是属性，行为抽象指的是方法。</li>
<li>详解：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/jdliyao/article/details/83117337">Java 面向对象特征</a></li>
</ul>
<h3 id="抽象类与接口"><a href="#抽象类与接口" class="headerlink" title="抽象类与接口"></a>抽象类与接口</h3><ol>
<li>抽象类</li>
</ol>
<ul>
<li>抽象类是用来捕捉子类的通用特性的</li>
<li>它不能被实例化，只能被用作子类的超类</li>
<li>抽象类是被用来创建继承层级里子类的模板</li>
</ul>
<ol start="2">
<li>接口</li>
</ol>
<ul>
<li>接口是抽象方法的集合</li>
<li>如果一个类实现了某个接口，那么它就继承了这个接口的抽象方法</li>
<li>如果实现了这个接口，那么就必须确保使用这些方法</li>
<li>接口只是一种形式，接口自身不能做任何事情</li>
</ul>
<ol start="3">
<li>抽象类和接口的对比</li>
</ol>
<table>
<thead>
<tr>
<th>参数</th>
<th>抽象类</th>
<th>接口</th>
</tr>
</thead>
<tbody><tr>
<td>默认的方法实现</td>
<td>它可以有默认的方法实现</td>
<td>接口完全是抽象的。它根本不存在方法的实现</td>
</tr>
<tr>
<td>实现</td>
<td>子类使用<strong>extends</strong>关键字来继承抽象类。如果子类不是抽象类的话，它需要提供抽象类中所有声明的方法的实现。</td>
<td>子类使用关键字<strong>implements</strong>来实现接口。它需要提供接口中所有声明的方法的实现</td>
</tr>
<tr>
<td>构造器</td>
<td>抽象类可以有构造器</td>
<td>接口不能有构造器</td>
</tr>
<tr>
<td>与正常Java类的区别</td>
<td>除了你不能实例化抽象类之外，它和普通Java类没有任何区别</td>
<td>接口是完全不同的类型</td>
</tr>
<tr>
<td>访问修饰符</td>
<td>抽象方法可以有<strong>public</strong>、<strong>protected</strong>和<strong>default</strong>这些修饰符</td>
<td>接口方法默认修饰符是<strong>public</strong>。你不可以使用其它修饰符。</td>
</tr>
<tr>
<td>main方法</td>
<td>抽象方法可以有main方法并且我们<strong>可以运行</strong>它</td>
<td>接口没有main方法，因此我们<strong>不能运行它</strong>。</td>
</tr>
<tr>
<td>多继承</td>
<td>抽象方法可以继承一个类和实现多个接口</td>
<td>接口只可以继承一个或多个其它接口</td>
</tr>
<tr>
<td>速度</td>
<td>它比接口速度要快</td>
<td>接口是稍微有点慢的，因为它需要时间去寻找在类中实现的方法。</td>
</tr>
<tr>
<td>添加新方法</td>
<td>如果你往抽象类中添加新的方法，你可以给它提供默认的实现。因此你不需要改变你现在的代码。</td>
<td>如果你往接口中添加方法，那么你必须改变实现该接口的类。</td>
</tr>
<tr>
<td>4. 使用时的一些注意事项</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<ul>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/fanshukui/article/details/80042669">抽象类与接口以及Java8中接口的默认方法</a></li>
</ul>
<h3 id="内部类"><a href="#内部类" class="headerlink" title="内部类"></a>内部类</h3><ol>
<li>概述</li>
</ol>
<ul>
<li>把类定义在另一个类的内部，该类就被称为内部类</li>
<li>把类Inner定义在类Outer中，类Inner就被称为内部类</li>
</ul>
<ol start="2">
<li>访问规则</li>
</ol>
<ul>
<li>可以直接访问外部类的成员，包括私有</li>
<li>外部类要想访问内部类成员，必须创建对象</li>
</ul>
<ol start="3">
<li>分类</li>
</ol>
<ul>
<li><strong>成员内部类</strong>：位于外部类成员位置的类，可以使用外部类中所有的成员变量和成员方法（包括private的）</li>
<li><strong>局部内部类</strong>：定义在一个方法或者一个作用域里面的类，主要是作用域发生了变化，只能在自身所在方法和属性中被使用</li>
<li><strong>静态内部类</strong>：用static修饰的内部类，不能使用外部类的非static成员变量和成员方法</li>
<li><strong>匿名内部类</strong>：一个没有名字的类，是内部类的简化写法，其实是继承该类或者实现接口的子类匿名对象</li>
</ul>
<ol start="4">
<li>使用详解</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.zhihu.com/question/26954130/answer/708467570">java内部类有什么作用？</a></li>
</ul>
<h3 id="重载与重写"><a href="#重载与重写" class="headerlink" title="重载与重写"></a>重载与重写</h3><ol>
<li>方法重载</li>
</ol>
<ul>
<li>同一个类中的多个方法具有相同的名字，这些方法具有不同的参数列表</li>
<li>参数类型和个数不一样，返回值类型可以相同也可以不相同</li>
<li>无法以返回型别作为重载函数的区分标准</li>
<li>重载Overloading是一个类中多态性的一种表现。</li>
</ul>
<ol start="2">
<li>方法重写</li>
</ol>
<ul>
<li>子类定义的方法与父类中的方法具有相同的方法名字，相同的参数表和相同的返回类型</li>
<li>子类中不能重写父类中的final方法</li>
<li>子类中必须重写父类中的abstract方法</li>
</ul>
<ol start="3">
<li>详细用法<br><a target="_blank" rel="noopener" href="https://www.cnblogs.com/upcwanghaibo/p/6527354.html">重载与重写的区别</a></li>
</ol>
<h3 id="自动装箱拆箱"><a href="#自动装箱拆箱" class="headerlink" title="自动装箱拆箱"></a>自动装箱拆箱</h3><ol>
<li>装箱就是自动将基本数据类型转换为包装器类型；</li>
<li>拆箱就是自动将包装器类型转换为基本数据类型。<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//自动装箱</span></span><br><span class="line">Integer total = <span class="number">99</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">//自动拆箱</span></span><br><span class="line"><span class="keyword">int</span> totalprim = total;</span><br></pre></td></tr></table></figure>

</li>
</ol>
<h3 id="Java中equals-和-的区别"><a href="#Java中equals-和-的区别" class="headerlink" title="Java中equals()和==的区别"></a>Java中equals()和==的区别</h3><ol>
<li>equals是判断两个变量或者实例指向同一个内存空间的值是否相同</li>
<li>==是判断两个变量或者实例是不是指向同一个内存空间</li>
<li>==是判断两个人是不是住在同一个地址，而equals是判断同一个地址里住的人是不是同一个</li>
</ol>
<h3 id="java中String、StringBuffer和StringBuilder的区别"><a href="#java中String、StringBuffer和StringBuilder的区别" class="headerlink" title="java中String、StringBuffer和StringBuilder的区别"></a>java中String、StringBuffer和StringBuilder的区别</h3><ol>
<li>可变与不可变：String是不可变字符串对象，StringBuilder和StringBuffer是可变字符串对象（其内部的字符数组长度可变）。</li>
<li>是否多线程安全：String 是线程安全的。StringBuffer 也是线程安全的，而 StringBuilder 是非线程安全的。</li>
<li>String、StringBuilder、StringBuffer三者的执行效率：</li>
</ol>
<ul>
<li>StringBuilder &gt; StringBuffer &gt; String</li>
</ul>
<ol start="4">
<li>应当根据不同的情况来进行选择使用：</li>
</ol>
<ul>
<li>当字符串相加操作或者改动较少的情况下，建议使用 String str=”hello”这种形式；</li>
<li>当字符串相加操作较多的情况下，建议使用StringBuilder，如果采用了多线程，则使用StringBuffer。</li>
</ul>
<ol start="5">
<li>例子：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/qq_40395278/article/details/78664762">Java笔记8 - 探秘Java中的String、StringBuilder以及StringBuffer</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/dolphin0520/p/3778589.html">探秘Java中的String、StringBuilder以及StringBuffer</a></li>
</ul>
<h3 id="Java中的集合"><a href="#Java中的集合" class="headerlink" title="Java中的集合"></a>Java中的集合</h3><ol>
<li>常用集合的分类：<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">Collection 接口的接口 对象的集合（单列集合）</span><br><span class="line">├——-List 接口：元素按进入先后有序保存，可重复</span><br><span class="line">│—————-├ LinkedList 接口实现类， 链表， 插入删除， 没有同步， 线程不安全</span><br><span class="line">│—————-├ ArrayList 接口实现类， 数组， 随机访问， 没有同步， 线程不安全</span><br><span class="line">│—————-└ Vector 接口实现类 数组， 同步， 线程安全</span><br><span class="line">│ ———————-└ Stack 是Vector类的实现类</span><br><span class="line">└——-Set 接口： 仅接收一次，不可重复，并做内部排序</span><br><span class="line">├—————-└HashSet 使用hash表（数组）存储元素</span><br><span class="line">│————————└ LinkedHashSet 链表维护元素的插入次序</span><br><span class="line">└ —————-TreeSet 底层实现为二叉树，元素排好序</span><br><span class="line"></span><br><span class="line">Map 接口 键值对的集合 （双列集合）</span><br><span class="line">├———Hashtable 接口实现类， 同步， 线程安全</span><br><span class="line">├———HashMap 接口实现类 ，没有同步， 线程不安全</span><br><span class="line">│—————–├ LinkedHashMap 双向链表和哈希表实现</span><br><span class="line">│—————–└ WeakHashMap</span><br><span class="line">├ ——–TreeMap 红黑树对所有的key进行排序</span><br><span class="line">└———IdentifyHashMap</span><br></pre></td></tr></table></figure></li>
<li>集合的详解和区别：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/feiyanaffection/article/details/81394745">java集合超详解</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/zhangqunshuai/article/details/80660974">Java集合中List,Set以及Map等集合体系详解(史上最全)</a></li>
</ul>
<h3 id="ArrayList和LinkedList区别"><a href="#ArrayList和LinkedList区别" class="headerlink" title="ArrayList和LinkedList区别"></a>ArrayList和LinkedList区别</h3><ol>
<li>ArrayList是实现了基于动态数组的数据结构，LinkedList实现了基于链表的数据结构。 </li>
<li>对于随机访问get和set，ArrayList绝对优于LinkedList，因为LinkedList要移动指针。 </li>
<li>对于新增和删除操作add和remove，LinedList比较占优势，因为ArrayList要移动数据。 </li>
</ol>
<h3 id="HashMap和HashTable的区别"><a href="#HashMap和HashTable的区别" class="headerlink" title="HashMap和HashTable的区别"></a>HashMap和HashTable的区别</h3><ol>
<li>继承的父类</li>
</ol>
<ul>
<li>都实现了Map、Cloneable（可复制）、Serializable（可序列化）接口。</li>
<li>HashMap: 继承自AbstractMap类。</li>
<li>HashTable: 继承自Dictionary类。</li>
</ul>
<ol start="2">
<li>线程安全性</li>
</ol>
<ul>
<li>HashMap: 线程不安全，效率高。</li>
<li>HashTable: 线程安全，效率低。</li>
</ul>
<ol start="3">
<li>null值问题</li>
</ol>
<ul>
<li>HashMap: 允许null值作为key或value。只有一个key可以为null，可以多个null为value</li>
<li>HashTable: 不允许null值作为key或value</li>
</ul>
<ol start="4">
<li>详细：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/tracydragonlxy/article/details/109239423">Java HashMap和HashTable的区别</a></li>
</ul>
<h3 id="Java字节流和字符流"><a href="#Java字节流和字符流" class="headerlink" title="Java字节流和字符流"></a>Java字节流和字符流</h3><ol>
<li>什么是字节流？<br>传输数据的最基本单位是字节的流。</li>
<li>什么是字符流？<br>传输数据的最基本单位是字符的流。</li>
<li>实现一个拷贝文件的类使用字节流还是字符流？</li>
</ol>
<ul>
<li>字符类型一般包括：word、txt、文本类型。</li>
<li>字节类型一般包括：图片、声音、图像等。</li>
<li>因为一般字符流最终都要转换成字节流，所以为考虑到通用性，要用字节流。</li>
</ul>
<ol start="4">
<li>详解：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/progor/p/9357676.html">Java:字节流和字符流（输入流和输出流）</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/qq_41112517/article/details/80304014">java中I/O流之字节流和字符流学习总结</a></li>
</ul>
<h3 id="多线程"><a href="#多线程" class="headerlink" title="多线程"></a>多线程</h3><ol>
<li>进程与线程</li>
</ol>
<ul>
<li>进程是程序的一次动态执行过程，它需要经历从代码加载，代码执行到执行完毕的一个完整的过程。</li>
<li>线程是比进程更小的执行单位，是进程中负责程序执行的执行单元。</li>
<li>一个进程可能包含多个同时执行的线程。</li>
</ul>
<ol start="2">
<li>Java中线程实现的方式</li>
</ol>
<ul>
<li>继承 Thread 类</li>
<li>实现 Runnable 接口</li>
</ul>
<ol start="3">
<li>Java线程具有五中基本状态</li>
</ol>
<ul>
<li><strong>新建状态（New）</strong>：当线程对象对创建后，即进入了新建状态，如：Thread t = new MyThread();</li>
<li><strong>就绪状态（Runnable）</strong>：当调用线程对象的start()方法（t.start();），线程即进入就绪状态。处于就绪状态的线程，只是说明此线程已经做好了准备，随时等待CPU调度执行，并不是说执行了t.start()此线程立即就会执行；</li>
<li><strong>运行状态（Running）</strong>：当CPU开始调度处于就绪状态的线程时，此时线程才得以真正执行，即进入到运行状态。注：就绪状态是进入到运行状态的唯一入口，也就是说，线程要想进入运行状态执行，首先必须处于就绪状态中；</li>
<li><strong>阻塞状态（Blocked）</strong>：处于运行状态中的线程由于某种原因，暂时放弃对CPU的使用权，停止执行，此时进入阻塞状态，直到其进入到就绪状态，才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同，阻塞状态又可以分为三种：</li>
</ul>
<ol>
<li><p>等待阻塞：运行状态中的线程执行wait()方法，使本线程进入到等待阻塞状态；</p>
</li>
<li><p>同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用)，它会进入同步阻塞状态；</p>
</li>
<li><p>其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时，线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时，线程重新转入就绪状态。</p>
</li>
</ol>
<ul>
<li><strong>死亡状态（Dead）</strong>：线程执行完了或者因异常退出了run()方法，该线程结束生命周期。</li>
</ul>
<ol start="4">
<li>详解：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/lwbqqyumidi/p/3804883.html">Java总结篇系列：Java多线程（一）</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/lwbqqyumidi/p/3817517.html">Java总结篇系列：Java多线程（二）</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/java1024/archive/2019/11/28/11950129.html">Java多线程看这一篇就足够了（吐血超详细总结）</a></li>
</ul>
<h3 id="线程同步和异步"><a href="#线程同步和异步" class="headerlink" title="线程同步和异步"></a>线程同步和异步</h3><ol>
<li>背景</li>
</ol>
<ul>
<li>多线程并发时，多个线程同时请求同一个资源，必然导致此资源的数据不安全</li>
<li>A线程修改了B线程的处理的数据，而B线程又修改了A线程处理的数据</li>
<li>优先考虑使用局部变量，退而求其次使用同步代码块</li>
</ul>
<ol start="2">
<li>线程同步</li>
</ol>
<ul>
<li>A线程要请求某个资源，但是此资源正在被B线程使用中，因为同步机制存在，A线程请求不到，只能等待下去。</li>
</ul>
<ol start="3">
<li>线程异步</li>
</ol>
<ul>
<li>A线程要请求某个资源，但是此资源正在被B线程使用中，因为没有同步机制存在，A线程仍然请求的到，A线程无需等待</li>
</ul>
<ol start="4">
<li>详解</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/xinruyi/p/11221545.html">java中的同步和异步</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/qq_31605475/article/details/105532300">Java 多线程同步和异步</a></li>
</ul>
<h3 id="线程安全"><a href="#线程安全" class="headerlink" title="线程安全"></a>线程安全</h3><ol>
<li>什么叫线程安全？</li>
</ol>
<ul>
<li>进程中有多个线程在同时运行，而这些线程可能会同时运行这段代码</li>
<li>如果每次运行结果和单线程运行的结果是一样的，而且其他的变量的值也和预期的是一样的，就是线程安全的</li>
</ul>
<ol start="2">
<li>servlet是线程安全吗?<br>servlet不是线程安全的，每个servlet都只被实例化一次，每个调用都是servlet的同一个实例，并且对类变量没有线程安全，数据量大的时候容易造成异常。</li>
<li>同步有几种实现方法？<br>同步的实现方面有两种，分别是synchronized,wait与notify</li>
<li>volatile有什么用？</li>
</ol>
<ul>
<li>Volatile 变量具有 synchronized 的可见性特性，但是不具备原子特性</li>
<li>与 synchronized 块相比，volatile 变量所需的编码较少，并且运行时开销也较少，所能实现的功能也仅是 synchronized 的一部分。</li>
</ul>
<ol start="5">
<li>详解</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/hongmoshui/p/11109982.html">java多线程面试题整理及答案</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/qlqwjy/p/7436535.html">Java面试题-线程安全</a></li>
</ul>
<h3 id="异常"><a href="#异常" class="headerlink" title="异常"></a>异常</h3><ol>
<li>程序错误分为三种：编译错误；运行时错误；逻辑错误。</li>
</ol>
<ul>
<li>编译错误：程序没有遵循语法规则，编译程序发现并提示错误的原因和位置。</li>
<li>运行时错误：程序在执行时，运行环境发现了不能执行的操作</li>
<li>逻辑错误：程序没有按照预期的逻辑顺序执行</li>
<li>异常：指程序运行时发生错误，而异常处理就是对这些错误进行处理和控制</li>
</ul>
<ol start="2">
<li>分类</li>
</ol>
<ul>
<li>Error（错误）:是程序无法处理的错误，表示运行应用程序中较严重问题。</li>
<li>Exception（异常）：是程序本身可以处理的异常。</li>
</ul>
<ol start="3">
<li>Exception（异常）分类</li>
</ol>
<ul>
<li>运行时异常：一般是由程序逻辑错误引起的，当程序中可能出现这类异常，即使没有用try-catch语句捕获它或throws子句声明抛出它，也会编译通过。</li>
<li>非运行时异常 （编译异常）：从程序语法角度讲是必须进行处理的异常，如果不处理，程序就不能编译通过。</li>
</ul>
<ol start="4">
<li>异常的处理</li>
</ol>
<ul>
<li>抛出异常：throw，throws</li>
<li>捕获异常：try，catch，finally</li>
</ul>
<ol start="5">
<li>详解：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/java_cxrs/article/details/91661623">JAVA异常详解</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/qq_29229567/article/details/80773970">Java：详解Java中的异常(Error与Exception)</a></li>
</ul>
<h3 id="JVM"><a href="#JVM" class="headerlink" title="JVM"></a>JVM</h3><ol>
<li><p>JVM基本结构<br><img src="http://file.yongkj.cn/fileSystem/admin/My%20Learning%20Material/%E9%9D%A2%E8%AF%95%E8%B5%84%E6%96%99/java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/35934b417f2a4c47a723e0c1bbe3fc9a-1217721-20171018190918474-1984800620.png" alt="1217721201710181909184741984800620.png"></p>
</li>
<li><p>类加载过程</p>
</li>
</ol>
<ul>
<li>加载：类加载器获二进制字节流，将静态存储结构转化为方法区的运行时数据结构，并生成此类的Class对象。</li>
<li>验证：验证文件格式、元数据、字节码、符号引用，确保Class的字节流中包含的信息符合当前虚拟机的要求。</li>
<li>准备：为类变量分配内存并设置其初始值，这些变量使用的内存都将在方法区中进行分配。</li>
<li>解析：将常量池内的符号引用替换为直接引用，包括类或接口的解析、字段解析、类方法解析、接口方法解析。</li>
<li>初始化：执行类中定义的Java程序代码（字节码）。<blockquote>
<p>类的生命周期（7个）：加载、验证、准备、解析、初始化、使用、卸载</p>
</blockquote>
</li>
</ul>
<ol start="2">
<li>JVM内存模型</li>
</ol>
<ul>
<li>线程独占:栈,本地方法栈,程序计数器</li>
<li>线程共享:堆,方法区</li>
</ul>
<ol start="3">
<li>JVM垃圾回收<br>GC (Garbage Collection)的基本原理：将内存中不再被使用的对象进行回收，GC中用于回收的方法称为收集器，由于GC需要消耗一些资源和时间，Java在对对象的生命周期特征进行分析后，按照新生代、旧生代的方式来对对象进行收集，以尽可能的缩短GC对应用造成的暂停</li>
<li>详解：</li>
</ol>
<ul>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/zsh2050/article/details/81229034">JVM基本结构</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/zwbg/p/6194470.html">JVM的基本结构及其各部分详解（一）</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/zwbg/p/6195841.html">JVM的基本结构及其各部分详解（二）</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/yuechuan/p/8984262.html">浅谈JVM及原理</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/werqerwer/article/details/88081810">拉勾网《32个Java面试必考点》学习笔记之四——JVM</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/weixin_33889245/article/details/88001814">面试必问之JVM原理</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/Butterfly_resting/article/details/89705057">几率大的JVM面试题（含答案）</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/lyxuefeng/article/details/101383679">java面试：JVM</a></li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/lingbo229/article/details/82586822">JVM堆内存(heap)详解</a></li>
</ul>

            </div>
            
                <div class="kratos-copyright text-center clearfix">
                    <h5>本作品采用 <a rel="license nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/4.0/">知识共享署名-相同方式共享 4.0 国际许可协议</a> 进行许可</h5>
                </div>
            
            <footer class="kratos-entry-footer clearfix">
                
                    <div class="post-like-donate text-center clearfix" id="post-like-donate">
                    
                    
                        <a class="share" href="javascript:;"><i class="fa fa-share-alt"></i> 分享</a>
                        <div class="share-wrap" style="display: none;">
    <div class="share-group">
        <a href="javascript:;" class="share-plain qq" onclick="share('qq');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-qq"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain qzone" onclick="share('qzone');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-star"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain weixin pop style-plain" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-weixin"></i>
            </div>
            <div class="share-int">
                <div class="qrcode" id="wechat-qr"></div>
                <p>打开微信“扫一扫”，打开网页后点击屏幕右上角分享按钮</p>
            </div>
        </a>
        <a href="javascript:;" class="share-plain weibo" onclick="share('weibo');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-weibo"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain facebook style-plain" onclick="share('facebook');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-facebook"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain twitter style-plain" onclick="share('twitter');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-twitter"></i>
            </div>
        </a>
    </div>
    <script type="text/javascript">
        $(()=>{
            new QRCode("wechat-qr", {
                text: "https://yongkj.gitee.io/blog/2021/01/06/java-based-summary/",
                width: 150,
                height: 150,
                correctLevel : QRCode.CorrectLevel.H
            });
        });
        function share(dest) {
            const qqBase        = "https://connect.qq.com/widget/shareqq/index.html?";
            const weiboBase     = "https://service.weibo.com/share/share.php?";
            const qzoneBase     = "https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?";
            const facebookBase  = "https://www.facebook.com/sharer/sharer.php?";
            const twitterBase   = "https://twitter.com/intent/tweet?";
            const hostUrl       = "https://yongkj.gitee.io/blog/2021/01/06/java-based-summary/";
            const title         = "「基础汇总」";
            const excerpt       = `Java的8种基本数据类型
关于Java的8种基本数据类型，其名称、位数、默认值、取值范围及示例如下表所示：




序号
数据类型
位数
默认值
取值范围
举例说明



1
byte(位)
8
0
-2^7 ~ +2^7-1
by...`;
            let _URL;
            switch (dest) {
                case "qq"       : _URL = qqBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy";     break;
                case "weibo"    : _URL = weiboBase+"url="+hostUrl+"&title="+title+excerpt;                                 break;
                case "qzone"    : _URL = qzoneBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy";  break;
                case "facebook" : _URL = facebookBase+"u="+hostUrl;                                                        break;
                case "twitter"  : _URL = twitterBase+"text="+title+excerpt+"&url="+hostUrl;                                break;
            }
            window.open(_URL);
        };
    </script>
</div>
                    
                    </div>
                
                <div class="footer-tag clearfix">
                    <div class="pull-left">
                    <i class="fa fa-tags"></i>
                        <a class="tag-none-link" href="/blog/tags/%E5%AF%B9%E8%B1%A1/" rel="tag">对象</a>, <a class="tag-none-link" href="/blog/tags/%E6%95%B0%E6%8D%AE/" rel="tag">数据</a>, <a class="tag-none-link" href="/blog/tags/%E7%BA%BF%E7%A8%8B/" rel="tag">线程</a>, <a class="tag-none-link" href="/blog/tags/%E9%9B%86%E5%90%88/" rel="tag">集合</a>
                    </div>
                    <div class="pull-date">
                    <span>最后编辑：2021-05-09</span>
                    </div>
                </div>
            </footer>
        </div>
        
            <nav class="navigation post-navigation clearfix" role="navigation">
                
                <div class="nav-previous clearfix">
                    <a title=" Education" href="/blog/2020/11/23/education/">&lt; 上一篇</a>
                </div>
                
                
                <div class="nav-next clearfix">
                    <a title=" 集合" href="/blog/2021/01/29/java-assemble/">下一篇 &gt;</a>
                </div>
                
            </nav>
        
        
    </article>
</section>
        </div>
                
            <section id="kratos-widget-area" class="col-md-4 hidden-xs hidden-sm">
                
                    <aside id="krw-about" class="widget widget-kratos-about clearfix">
    
    <div class="photo-background"></div>
    <div class="photo-wrapper clearfix">
        <div class="photo-wrapper-tip text-center">
            <img class="about-photo" src="/blog/images/avatar.webp" />
        </div>
    </div>
    <div class="textwidget">
        
            <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E7%9A%848%E7%A7%8D%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="toc-number">1.</span> <span class="toc-text">Java的8种基本数据类型</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#java%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%89%B9%E5%BE%81"><span class="toc-number">2.</span> <span class="toc-text">java面向对象的特征</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3"><span class="toc-number">3.</span> <span class="toc-text">抽象类与接口</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%86%85%E9%83%A8%E7%B1%BB"><span class="toc-number">4.</span> <span class="toc-text">内部类</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%87%8D%E8%BD%BD%E4%B8%8E%E9%87%8D%E5%86%99"><span class="toc-number">5.</span> <span class="toc-text">重载与重写</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%87%AA%E5%8A%A8%E8%A3%85%E7%AE%B1%E6%8B%86%E7%AE%B1"><span class="toc-number">6.</span> <span class="toc-text">自动装箱拆箱</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E4%B8%ADequals-%E5%92%8C-%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="toc-number">7.</span> <span class="toc-text">Java中equals()和&#x3D;&#x3D;的区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#java%E4%B8%ADString%E3%80%81StringBuffer%E5%92%8CStringBuilder%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="toc-number">8.</span> <span class="toc-text">java中String、StringBuffer和StringBuilder的区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E4%B8%AD%E7%9A%84%E9%9B%86%E5%90%88"><span class="toc-number">9.</span> <span class="toc-text">Java中的集合</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#ArrayList%E5%92%8CLinkedList%E5%8C%BA%E5%88%AB"><span class="toc-number">10.</span> <span class="toc-text">ArrayList和LinkedList区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#HashMap%E5%92%8CHashTable%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="toc-number">11.</span> <span class="toc-text">HashMap和HashTable的区别</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Java%E5%AD%97%E8%8A%82%E6%B5%81%E5%92%8C%E5%AD%97%E7%AC%A6%E6%B5%81"><span class="toc-number">12.</span> <span class="toc-text">Java字节流和字符流</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%A4%9A%E7%BA%BF%E7%A8%8B"><span class="toc-number">13.</span> <span class="toc-text">多线程</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E5%92%8C%E5%BC%82%E6%AD%A5"><span class="toc-number">14.</span> <span class="toc-text">线程同步和异步</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8"><span class="toc-number">15.</span> <span class="toc-text">线程安全</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%BC%82%E5%B8%B8"><span class="toc-number">16.</span> <span class="toc-text">异常</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#JVM"><span class="toc-number">17.</span> <span class="toc-text">JVM</span></a></li></ol>
        
    </div>
</aside>
                
                    <!-- Moved to about.ejs -->
                
                    
  <aside id="krw-categories" class="widget widget-categories clearfix">
    <h4 class="widget-title"><i class="fa fa-folder"></i>分类目录</h4>
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/blog/categories/Java%E5%AD%A6%E4%B9%A0/">Java学习</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/blog/categories/%E7%AC%AC%E4%B8%80%E6%AC%A1/">第一次</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/blog/categories/%E8%8B%B1%E8%AF%AD%E5%AD%A6%E4%B9%A0/">英语学习</a><span class="category-list-count">8</span></li><li class="category-list-item"><a class="category-list-link" href="/blog/categories/%E9%9F%B3%E4%B9%90%E7%A9%BA%E9%97%B4/">音乐空间</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/blog/categories/%E9%A1%B9%E7%9B%AE%E7%BB%8F%E5%8E%86/">项目经历</a><span class="category-list-count">3</span></li></ul>
  </aside>


                
                    
  <aside id="krw-tags" class="widget widget-kratos-tags clearfix">
    <h4 class="widget-title"><i class="fa fa-tags"></i>标签聚合</h4>
      <div class="tag-clouds">
        <a href="/blog/tags/apility/" style="font-size: 0.6em;">apility</a> <a href="/blog/tags/bus/" style="font-size: 0.6em;">bus</a> <a href="/blog/tags/city/" style="font-size: 0.6em;">city</a> <a href="/blog/tags/comfort/" style="font-size: 0.6em;">comfort</a> <a href="/blog/tags/communication/" style="font-size: 0.6em;">communication</a> <a href="/blog/tags/contribute/" style="font-size: 0.6em;">contribute</a> <a href="/blog/tags/convenient/" style="font-size: 0.6em;">convenient</a> <a href="/blog/tags/develop/" style="font-size: 0.6em;">develop</a> <a href="/blog/tags/education/" style="font-size: 0.6em;">education</a> <a href="/blog/tags/enhance/" style="font-size: 0.6em;">enhance</a> <a href="/blog/tags/facility/" style="font-size: 0.6em;">facility</a> <a href="/blog/tags/flight/" style="font-size: 0.6em;">flight</a> <a href="/blog/tags/foreign/" style="font-size: 0.6em;">foreign</a> <a href="/blog/tags/free/" style="font-size: 0.6em;">free</a> <a href="/blog/tags/hello/" style="font-size: 0.6em;">hello</a> <a href="/blog/tags/improve/" style="font-size: 0.8em;">improve</a> <a href="/blog/tags/information/" style="font-size: 0.6em;">information</a> <a href="/blog/tags/invest/" style="font-size: 0.6em;">invest</a>
      </div>
  </aside>

                
                    
  <aside id="krw-posts" class="widget widget-kratos-poststab">
  <h4 class="widget-title"><i class="fa fa-file"></i>最新文章</h4>
  <div class="tab-content">
      <ul class="list-group">
        
        
          
          
            <a class="list-group-item" href="/blog/2021/02/12/java-dynamic-proxy/"><i class="fa  fa-book"></i> 动态代理</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2021/02/12/java-constructor/"><i class="fa  fa-book"></i> 构造器的注入与使用</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2021/02/12/java-ioc-di/"><i class="fa  fa-book"></i> 控制反转与依赖注入</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2021/02/09/java-io-stream/"><i class="fa  fa-book"></i> 输入输出流</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2021/02/08/java-class-loading/"><i class="fa  fa-book"></i> 类加载</a>
            
          
        
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
          
            
      </ul>
  </div>
  </aside>

                
            </section>
        
        </div>
    </div>
</div>
<footer>
    <div id="footer">
        <div class="kr-tool text-center">
            <div class="tool">
                
                    <div class="box search-box">
                        <a href="/blog/search/">
                            <span class="fa fa-search"></span>
                        </a>
                    </div>
                
                
                    <div class="box theme-box" id="darkmode-switch">
                        <span class="fa fa-adjust"></span>
                    </div>
                
                
            </div>
            <div class="box gotop-box">
                <span class="fa fa-chevron-up"></span>
            </div>
        </div>
        <div class="container">
            <div class="row">
                <div class="col-md-6 col-md-offset-3 footer-list text-center">
                    <ul class="kratos-social-icons">
                        
                        
                        <li><a target="_blank" rel="nofollow" href="https://t.me/CandyUnion"><i class="fa fa-telegram"></i></a></li>
                        <li><a target="_blank" rel="nofollow" href="https://twitter.com/Candiinya"><i class="fa fa-twitter"></i></a></li>
                        
                        
                        
                        <li><a target="_blank" rel="nofollow" href="https://github.com/yongkj"><i class="fa fa-github"></i></a></li>
                        <li><a target="_blank" rel="nofollow" href="/blog/atom.xml"><i class="fa fa-rss"></i></a></li>
                    </ul>
                    <ul class="kratos-copyright">
                        <div>
                            <li>&copy; 2021 yongkj 版权所有.</li>
                            <li>本站已运行<span id="span_dt">Loading...</span></li>
                        </div>
                        <div>
                            <li>Theme <a href="https://github.com/Candinya/Kratos-Rebirth" target="_blank">Kratos:Rebirth</a></li>
                            <li>Made with&nbsp;<i class="fa fa-heart throb" style="color:#d43f57"></i>&nbsp;by <a href="https://candinya.com" target="_blank" rel="nofollow">Candinya</a>.</li>
                        </div>
                        <div>
                            <li>Powered by <a href="https://hexo.io" target="_blank" rel="nofollow">Hexo</a></li>
                            <li>Hosted on <a href="https://www.yongkj.cn" target="_blank">勇往直前</a></li>
                        </div>
                        <div>
                            
                            
                        </div>
                    </ul>
                </div>
            </div>
        </div>
    </div>
</footer>
</div>
</div>

        <script defer src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.4/dist/js/bootstrap.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.js"></script>
<script>const notMobile = (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)));</script>

    <div>
        <canvas id="snow"></canvas>
        <script async type="text/javascript" src="/blog/js/snow.min.js"></script>
    </div>

<script async src="/blog/js/candy.min.js"></script>


    <script defer src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>

<script defer src="https://cdn.jsdelivr.net/npm/clipboard@2.0.6/dist/clipboard.min.js"></script>
<script defer src="/blog/js/kratosr.min.js"></script>
<script defer src="/blog/js/pjax.min.js"></script>


    <script defer src="/blog/js/kr-dark.min.js"></script>



    </body>
</html>